Mainnet forking
In some cases, you may want to connect to a network using a different chainId
than its default. For example, your application is supposed to support the Mainnet network and forked Mainnet chain using Tenderly, so the forked Mainnet should be accessible by a different number than the default chainId
of the Mainnet, but the default for both networks it is the same which causes some problems.
Example
So we may want to do something like this:
const config: Config = {
readOnlyChainId: Mainnet.chainId,
readOnlyUrls: {
[Mainnet.chainId]: 'https://mainnet.infura.io/v3/[your-infura-key]',
1337: 'https://rpc.tenderly.co/fork/[your-mainnet-fork-id]',
},
multicallAddresses: {
[Mainnet.chainId]: Mainnet.multicall2Address as string,
1337: Mainnet.multicall2Address as string,
},
multicallVersion: 2 as const,
}
In this case, we want to have our forked Mainnet chain available on chainId
: 1337
, which is the default for the Ganache network. But this won't work because it generates the provider with the same chainId
as the default one, which is 1
for Mainnet.
Solution
We can create a custom provider with overridden chainId
:
const customProvider = new providers.StaticJsonRpcProvider('https://rpc.tenderly.co/fork/xxx', {
name: 'mainnet-fork',
chainId: 1337,
})
const config: Config = {
readOnlyChainId: Mainnet.chainId,
readOnlyUrls: {
[Mainnet.chainId]: 'https://mainnet.infura.io/v3/[your-infura-key]',
1337: customProvider,
},
multicallAddresses: {
[Mainnet.chainId]: Mainnet.multicall2Address as string,
1337: Mainnet.multicall2Address as string,
},
multicallVersion: 2 as const,
}